home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume91 / aplictns / mandel10 / part01 next >
Encoding:
Internet Message Format  |  1991-02-18  |  55.5 KB

  1. Path: news.larc.nasa.gov!amiga-request
  2. From: amiga-request@ab20.larc.nasa.gov (Amiga Sources/Binaries Moderator)
  3. Subject: v91i017: Mandel 1.0 - yet another mandelbrot, Part01/04
  4. Reply-To: dm@stekt.oulu.fi (Hannu Helminen ti)
  5. Newsgroups: comp.sources.amiga
  6. Message-ID: <comp.sources.amiga:v91i017@ab20.larc.nasa.gov>
  7. Date: 18 Feb 91 22:25:42 GMT
  8. Approved: tadguy@uunet.UU.NET (Tad Guy)
  9. X-Mail-Submissions-To: amiga@uunet.uu.net
  10. X-Post-Discussions-To: comp.sys.amiga.misc
  11.  
  12. Submitted-by: dm@stekt.oulu.fi (Hannu Helminen ti)
  13. Posting-number: Volume 91, Issue 017
  14. Archive-name: applications/mandel-1.0/part01
  15.  
  16. [ uuencoded executable, icons, and library enclosed  ...tad ]
  17. [ also, one source file was split to allow for posting.  ...tad ]
  18.  
  19.         This is yet another mandelbrot for amiga, but this one is quite
  20.         fast. It also has a cute graphical user interface.
  21.         Freely distributable. Source included.
  22.  
  23.         Author: Hannu Helminen
  24.         dm@stekt.oulu.fi
  25.  
  26.  
  27. #!/bin/sh
  28. # This is a shell archive.  Remove anything before this line, then unpack
  29. # it by saving it into a file and typing "sh file".  To overwrite existing
  30. # files, type "sh file -c".  You can also feed this as standard input via
  31. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  32. # will see the following message at the end:
  33. #        "End of archive 1 (of 4)."
  34. # Contents:  iff.library.uu mandel.doc mandel.doc.uu mandel.info.uu
  35. #   mandel.uu source source/gui.asm.ae source/iff.i source/macros.i
  36. #   source/mbrot.i source/pipe.asm
  37. # Wrapped by tadguy@ab20 on Mon Feb 18 17:25:39 1991
  38. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  39. if test -f 'iff.library.uu' -a "${1}" != "-c" ; then 
  40.   echo shar: Will not clobber existing file \"'iff.library.uu'\"
  41. else
  42. echo shar: Extracting \"'iff.library.uu'\" \(3334 characters\)
  43. sed "s/^X//" >'iff.library.uu' <<'END_OF_FILE'
  44. Xbegin 666 iff.library
  45. XM```#\P`````````#``````````(```(>``````````````/I```"'F`$0TA7M
  46. XM(4/Z`(`L>``$3J[^:"Q`3J[_Q"(`0?H`/B0(=BU.KO_0(DXL>``$3J[^8G`%Q
  47. XM3G5*_````#0```((@!`)`0```$X```!:````E&EF9BYL:6)R87)Y`$E&1B`Q;
  48. XM-BXQ("@P,2U$96,M,3DX."D@8GD@0VAR:7-T:6%N($$N(%=E8F5R"@!D;W,N)
  49. XM;&EB<F%R>0`````Z````I````.0```$0```!/@```8H```'"```"!@```@@`G
  50. XM``+````"W@```P0```,4```#6```!&(```1Z```(`@``""````(0_____^``?
  51. XM``@)`,````H```!.X```#@8`T```%``0T```%@`!P```&````%H`````2.?`9
  52. XMQ"I`*T@`(D/Z_VQP'TZN_=@K0``H0>T`+""(6)!"J``$(4@`"$S?(P-.=4CGJ
  53. XM0.8J3F$`!GYF/'`6<@$L>``$3J[_.DJ`9RPD0)/)3J[^VB5```Y"J@`20>T`+
  54. XM+")*3J[_"E)M`"`(K0`#`"8@#4S?9P).=7``8/9(YP`F*DYA``8R9Q0D0")`+
  55. XM+'@`!$ZN_P1P%B)*3J[_+DS?9`!P`%-N`"!F"@@N``,`)F<"80).=4CG(`8J_
  56. XM3DIM`"!G"@CM``,`)G``8"HB32QX``1.KO\$(FT`*$ZN_F(D+0`B<``B33`M&
  57. XM`!"2P-!M`!).KO\N(`),WV`$3G5(YSXF?/]@!DCG/B8L`"I.3^__]'H`(@@DR
  58. XM/````^TL;0`H3J[_XB@`9@1Z$&!P(@0D#W8,3J[_U@R71D]236<$>A-@4"(&)
  59. XM:@YR`0RO.%-66``(9@)R`W0,)B\`!-2#(`(L>``$3J[_.DJ`9@1Z$F`D)$`D_
  60. XMPB($)`I0@EB"+&T`*$ZN_]9*@&H$>A%@"$S7``=(T@`'(@0L;0`H3J[_W"`%M
  61. XM9P9A``5$8`9A``4R(`I/[P`,3-]D?$YU2.<`!BI.(`EG"B`A+'@`!$ZN_RYA1
  62. XM``4.3-]@`$YU(&D`!$/I``S1R;"19Q0B*0`$4H$(@0``0_$8"+/(9>J3R2`)*
  63. XM3G4@/$)-2$1A`/_29P)0@$YU2.<X("1((#Q#34%080#_O$J`9RH@0%B(*!B)8
  64. XM_``#2,0@!%.$<@!T`'8`$A@4&!88Z4GH2X)"@D,TP5',_^A,WP0<3G5(YS\^'
  65. XM3^_^M"I.)D@H20RL24Q"30`(9P9P&&```+)A`/^,9@9P&6```*8D0$SK`/\`S
  66. XM"$C7`/]T`!0J``BT*P`%8P9P&V```(@@/$)/1%DB3&$`_S1F!'`:8'0@0%B(T
  67. XM(!A)\`@`$"H`"F8&3?H`<F`.#````6<$<!Q@5$WZ`&A^``PJ``$`"5?'>``X#
  68. XM$MA\``_FC`B$``!Z`#H3?``\*P`"4T930C8")$\@!")23I;;FE'+__9*!V<(Z
  69. XM(`1#[P`@3I:QS&0$4<[_WF$``\)@!&$``\A/[P%,3-]\_$YU$MA1R/_\3G4_B
  70. XM`G(`$AAK"A+84T!1R?_Z8`Q$`108$L)30%')__I*0&[@-!].=4CG.`!R`'0`U
  71. XM-A$X*0`"80``"$S?`!Q.=4CG/SZ>_`$,*DXL""9)*$\_00$$/T(!!@B#```_9
  72. XM0P$(/T0!"BC\1D]237X\*,<H_$E,0DTH_$)-2$1^%"C'&4``"D(L``E"+``+V
  73. XM0FP`#$*L``0Y?`H+``X9:P`%``CG2SB#.4,`$#E$``(Y1``2+WQ#04U'`"A^%
  74. XM!"]'`"P@3&$``UH(K``'``IG!`C```LO0``P+WS____X`#@@"F=$0^\`-"+\C
  75. XM0TU!4'`!<@$2*P`%XV@T`,#\``-4@`)`__PBP%-",!KI2!-```+H2`(``/`32
  76. XM0``!Z$@"``#P$H!625'*_^(B!B0\```#[BQM`"A.KO_B+@!G``"P("\`.-&OS
  77. XM``0B!R0/=D36KP`X+&T`*$ZN_]!*@&L``)!*+``*9@9A``"B8`1A``$D2H!KV
  78. XM>B8`5H/&/`#\+T,!`->O``26@$J#9Q0B!T*G)`\L;0`H3J[_T%B/2H!K4"('X
  79. XM=`!V_RQM`"A.KO^^(@<D#W8\UJ\`."QM`"A.KO_02H!K+$'O`/P@O$)/1%DBS
  80. XM!R0(=@@L;0`H3J[_T$J`:Q`B!RQM`"A.KO_<80`!R&`2(@=G""QM`"A.KO_</
  81. XM<!1A``'`WOP!#$S??/Q.=4CG/CA)[P`DGOP`)#`L`0AR`!(K``7`P3(L`0K`U
  82. XMP2]``"`R+`$&PM-P`#`L`032@$'K``@B3W`')!C4@2+"4<C_^'8`>`!Z`#H3#
  83. XM%BL`!39#-BP!"#@L`0I31%-+)$\L"R(')!(L;0`H3J[_T$J`:P[;FE'._^Q1V
  84. XMS/_D("\`(-[\`"1,WQQ\3G5(YSXX2>\`))[\`21"KP$@,BP!!L+3<``P+`$$_
  85. XMTH!!ZP`((D]P!R08U($BPE'(__AV`'@`>@`Z$Q8K``4F0S8L`0@X+`$*4T13;
  86. XMBR1/+`LP`R!20^\`(&$VT:\!("('0^\`("0)+P,F`"QM`"A.KO_0)A]*@&L.X
  87. XMVYI1SO_44<S_S"`O`2#>_`$D3-\<?$YU2.<P,$7P``!V`&%,L'P``VT05(,2`
  88. XM$-#`4T!$`!+`$L%@*B9(=`!2`FL04HBQRFP,82:P?``#;>Y@`G1_($O6@E*#B
  89. XM4T(2PA+84<K__+'*;;H@`TS?#`Q.=2\(<`$2&+(89@RP?`"`;`920+'*;?`@J
  90. XM7TYUD\DL>``$3J[^VB(`("T`+"!`(!!G"+*H``YF]"`(3G5AWF<$0J@`$G`!8
  91. XM3G4O`B0`8<YG!"%"`!(D'W``3G5(YP`&*DYANDJ`9PX@*``20J@`$DS?8`!.3
  92. XM=7#_8/8O"B1)(#Q#04U'80#ZLF<(($`@*``(8!@B2F$`^LAG$"!`81`,*``&)
  93. XM``AM!`C```LD7TYU<``,*``$``AN"@Q0`8!O!`C```\,:`$8``)M!`C```).Y
  94. XM=0`````#[````!D`````````-@```#H```!"````1@```$H```"8````G```S
  95. XM`*````"D````J````*P```"P````M````+@```"\````P````,0```#(````\
  96. XMS````-````#4````V````-P```#N```!"`````````/R```#Z@````````/RR
  97. X,```#ZP````````/RC
  98. X``
  99. Xend
  100. Xsize 2352
  101. END_OF_FILE
  102. if test 3334 -ne `wc -c <'iff.library.uu'`; then
  103.     echo shar: \"'iff.library.uu'\" unpacked with wrong size!
  104. fi
  105. # end of 'iff.library.uu'
  106. fi
  107. if test -f 'mandel.doc' -a "${1}" != "-c" ; then 
  108.   echo shar: Will not clobber existing file \"'mandel.doc'\"
  109. else
  110. echo shar: Extracting \"'mandel.doc'\" \(14242 characters\)
  111. sed "s/^X//" >'mandel.doc' <<'END_OF_FILE'
  112. X
  113. X-----------------------------------------------------------------------------
  114. X
  115. X    Version history
  116. X
  117. X    v0.50   First numbered version. Most bugs I've found are fixed.
  118. X    v0.60   Workbench interface added.
  119. X    v1.00   First public release.
  120. X
  121. X-----------------------------------------------------------------------------
  122. X
  123. X    BUGS
  124. X
  125. X    -   Not very smart handling of AUTOCRAWL
  126. X    -   If invoked with too little memory, 56 bytes will mysteriously
  127. X        disappear
  128. X    -   Window title bar may get trashed if moved too high
  129. X
  130. X-----------------------------------------------------------------------------
  131. X
  132. X    Copying licence:
  133. X
  134. X    This program is copyright 1990 by Hannu Helminen. However, you may
  135. X    freely distribute it provided that this package is left intact and no
  136. X    charge is taken. You are also licenced to use parts of the code in your
  137. X    programs provided that
  138. X
  139. X    1)  New versions are clearly marked as such
  140. X    2)  You give credit where credit is due (me)
  141. X
  142. X    I will not guarantee anything about this program. It seems quite
  143. X    reliable to me, though.
  144. X
  145. X-----------------------------------------------------------------------------
  146. X
  147. X    Package includes:
  148. X
  149. X    mandel          Main proggie
  150. X    mandel.doc      This file
  151. X    iff.library     Used when saving pictures. Place in libs: directory.
  152. X
  153. X    source/gui.asm  Graphical user interface
  154. X    source/brot.asm This takes care of the actual drawing
  155. X    source/pipe.asm A package of fifo routines, as needed by brot
  156. X
  157. X    source/macros.i General macros
  158. X    source/mbrot.i  brot-specific include file, including my own structure
  159. X    source/iff.i    Needed to use iff.library
  160. X
  161. X-----------------------------------------------------------------------------
  162. X
  163. X
  164. X
  165. X    OVERVIEW
  166. X
  167. X    There are quite a few Mandelbrot programs for Amiga, perhaps to the
  168. X    extent that I should have named my program "yamb" instead of "mandel".
  169. X    (Yet Another MandelBrot)
  170. X
  171. X    I hope though that there are enough reasons to satisfy the existence of
  172. X    this program. Namely, it was designed with three goals in mind: first,
  173. X    speed. Secondly, speed. And last but not least, speed.
  174. X
  175. X    Of course, most Mandelbrot programs draw nice-looking pictures, if only
  176. X    you can wait for ten minutes or even more for them to be complete.
  177. X    Increase the number of iterations and you will have to wait for hours,
  178. X    unless you are one of those lucky guys with a 60-MHz 68040-equipped
  179. X    A3000's... The main reason for that slowness is the floating point math
  180. X    most programs use.
  181. X
  182. X    The first version of this program was quite ugly: coded partly in
  183. X    Basic, partly in 68000 machine language, it was a mess of a code. Its
  184. X    optimized core used 32-bit fixed point math but was still relatively
  185. X    slow. After writing it, I forgot it for years.
  186. X
  187. X    Then someone in alt.fractals told about a new algorithm called contour
  188. X    crawling that produces fast images of Mandelbrot set. I adopted the
  189. X    idea and rewrote the program to use it, this time completely in machine
  190. X    language. It turned out to be fast (within minutes); that is because it
  191. X    does not need to iterate all pixels. And the drawing was visually
  192. X    attractive, so it suits well for interactive use.
  193. X
  194. X    After imploying a 16-bit iteration for lower resolutions, I found I had
  195. X    written the fastest Mandelbrot program I had ever seen. (Ok, forget
  196. X    that little transputer...) I cannot pretend to have seen even all Amiga
  197. X    ones, though, so there may already be a faster one. If so, please tell
  198. X    me that all this code was in vain.
  199. X
  200. X
  201. X
  202. X    USAGE
  203. X
  204. X    Start from CLI by typing `mandel', or click the icon in Workbench. The
  205. X    program will then immediately begin to draw the Mandelbrot set. Various
  206. X    options exists, however, to modify how, where and when the image will
  207. X    be drawn. Use CTRL-C to abort a draw in progress, and another CTRL-C to
  208. X    abort the program.
  209. X
  210. X    From CLI: Enter the options after the command, e.g.
  211. X
  212. X        mandel -i1000 -j -sram:Picture
  213. X
  214. X    Type `mandel ?' to see a brief summary of the options.
  215. X
  216. X    From Workbench: Select mandel icon, select `info' from the `Workbench'
  217. X    menu and enter options in the TOOL TYPES array, e.g.
  218. X
  219. X        I=100
  220. X        FLAGS=j
  221. X        SAVE=ram:Picture
  222. X
  223. X
  224. X    The options are listed below. # is a shorthand for a number.
  225. X
  226. X    CLI     WorkBench
  227. X
  228. X    -x#     X=#     These determine the point (z = x + yi) in the complex
  229. X    -y#     Y=#     plane you will see right in the center of your monitor.
  230. X                    They are in the range -4 to 4.
  231. X
  232. X    -m#     M=#     This is a logarithmic quantity that represents the
  233. X                    magnification of the image. 2^(-m) determines the
  234. X                    distance between two lo-res pixels in complex plane.
  235. X                    Default is 6, maximum is 29.
  236. X
  237. X    -i#     I=#     Iterations. Self-explanatory? No? The greater the
  238. X                    number, the more accurate pictures mandel will draw.
  239. X                    For further information, refer to APPENDIX A.
  240. X                    The maximum number of iterations is 65535.
  241. X
  242. X    -jx#    JX=#    These determine a constant (c = jx + jy i) that is used
  243. X    -jy#    JY=#    when iterating a Julia set. Each c will produce a
  244. X                    different set. See APPENDIX A. These, too, have a range
  245. X                    from -4 to 4.
  246. X
  247. X    -sname SAVE=name This determines a filename for saved pictures.
  248. X
  249. X                    If mandel is operated interactively (g flag is set),
  250. X                    the user can save pictures by pressing CTRL S. The
  251. X                    standard filename is `mandel.picture', but can be
  252. X                    overridden by this option. If many pictures are saved,
  253. X                    a number is added at the end to distinguish the files
  254. X                    from each other.
  255. X
  256. X                    If mandel is in non-interactive use (x flag is set),
  257. X                    this options specifies that the image must be saved
  258. X                    upon exit, and determines the name for it. Note: if
  259. X                    this option does not exists, no image will be saved.
  260. X
  261. X    -l      FLAGS=l Normally mandel determines itself whether it should use
  262. X    -h      FLAGS=h 16 or 32 bits of precision, as denoded by (a). There
  263. X    -a      FLAGS=a are certain, limited circumstances when you need to set
  264. X                    the precision explicitely to 16 (l) or 32 (h) bits. In
  265. X                    particular, Julia sets that have a complex structure
  266. X                    near origo may produce inaccurate images unless 32 bits
  267. X                    are used.
  268. X
  269. X    -c      FLAGS=c You can enable (c) or disable (w) the crawling if you
  270. X    -w      FLAGS=w wish, default is (p), which means to crawl whenever
  271. X    -p      FLAGS=p possible. Currently non-connected Julia sets are not
  272. X                    crawled because they *could* produce inaccurate
  273. X                    results. Future versions might add more sanity checks
  274. X                    to this.
  275. X
  276. X    -x      FLAGS=x When the (x) flag is used, the programs exits
  277. X    -g      FLAGS=g immediately after the first image is drawn. Default is
  278. X                    (g) which means to prompt the user with a
  279. X                    requester-like window (See below). The x flag is
  280. X                    intented for non-interactive use, for example
  281. X                    continuous zooms that are achieved via scripts.
  282. X
  283. X    -m      FLAGS=m Whether you want to draw Julia (j) or Mandelbrot (m)
  284. X    -j      FLAGS=j sets. See APPENDIX A.
  285. X
  286. X
  287. X    NOTE:   In Workbench, if multiple FLAGS are used, they *must* be
  288. X            combined in a single FLAGS entry, e.g.
  289. X
  290. X                FLAGS=apgx
  291. X
  292. X            In CLI, flags *must not* be combined, so do not try `-apgx'
  293. X            instead of `-a -p -g -x'.
  294. X
  295. X
  296. X
  297. X    GRAPHICAL USER INTERFACE
  298. X
  299. X    When mandel is invoked with the -g option, after the first image is
  300. X    drawn, a requester-like window will pop in. A grid will also be
  301. X    displayed, indicating the centerpoint and borders of the next image.
  302. X    Screen title bar will show coordinates of the mouse position.
  303. X
  304. X    You can then set the centerpoint by clicking in the image or entering a
  305. X    value in the string gadgets labeled `X' and `Y'. Magnification and
  306. X    iterations can be set in the gadgets `M' and `I', respectively.
  307. X
  308. X    A new quantity can be set using the `Z' gadget: zooming. As its name
  309. X    implies, this determines which portion of the current image will be
  310. X    shown in the next one. This is a signed number that will be added to
  311. X    magnification, thus set z=0 for 100% zooming, z=1 for 50%, z=-1 for
  312. X    200% etc. This can also be set by pressing the right mouse button and
  313. X    moving it over the image.
  314. X
  315. X    The program draws images in one of three modes: ZOOM, DRAW and RESET.
  316. X    ZOOM means zooming to the size shown by the grid. DRAW will take the
  317. X    numbers from the requester and draw according to them (used for example
  318. X    to redraw the same picture, or to quickly enter a very deep
  319. X    magnification level)
  320. X
  321. X    As setting zoom in DRAW mode makes as little sense as setting
  322. X    magnification in ZOOM mode, these modifications will immediately change
  323. X    the draw mode, too. The third mode, RESET, will return the
  324. X    magnification and centerpoint to normal. The mode can be changed by
  325. X    respective gadgets.
  326. X
  327. X    Clicking MAND or JULIA will change the set type to Mandelbrot or Julia.
  328. X    The magical constant c for Julia sets (See APPENDIX A) can be set as
  329. X    follows: Make sure you are in MAND mode. Then select the point c by
  330. X    either clicking on the image or entering it in the X/Y-gadgets. Then
  331. X    click JULIA gadget and select whatever centerpoint you wish your image
  332. X    to have.
  333. X
  334. X    Alas, window close gadget only removes the requester window, screen
  335. X    title and grid in order to let you view the image. Normal operation is
  336. X    resumed by pressing either mouse button.
  337. X
  338. X    Quit the program by double-clicking the QUIT gadget or draw a new set
  339. X    by double-clicking either in the image or one of the gadgets ZOOM,
  340. X    DRAW, RESET.
  341. X
  342. X
  343. X
  344. X    AUTHOR
  345. X
  346. X    Hannu "The DM" Helminen
  347. X    Perkkio
  348. X    85900  REISJARVI
  349. X    FINLAND
  350. X
  351. X    dm@stekt.oulu.fi (for the next few years, I hope)
  352. X
  353. X
  354. X
  355. X    THANKS
  356. X
  357. X    Thanks to
  358. X
  359. X        T. Saarinen for extensive beta-testing
  360. X
  361. X        'LS' Hautamaki for not-so-extensive testing
  362. X
  363. X        J.M. Jarre who was in great help during long nights of programming
  364. X
  365. X        B. Mandelbrot who invented the set that carries his name
  366. X
  367. X
  368. X
  369. X
  370. X
  371. X    APPENDIX A: A mathematical definition of Mandelbrot and Julia sets.
  372. X
  373. X
  374. X    A point z = x + y i is said to be in the Mandelbrot set if
  375. X             0
  376. X
  377. X             2
  378. X    z    = z   + c  does not go to  +-oo (infinity) when n -> oo
  379. X     n+1    n
  380. X                           ____
  381. X    where c = z .  ( i = ,/ -1   so  z, c are complex numbers )
  382. X               0
  383. X
  384. X
  385. X    A point z = x + y i is said to be in the Julia set c if
  386. X             0
  387. X
  388. X             2
  389. X    z    = z   + c does not -> oo when n -> oo
  390. X     n+1    n
  391. X
  392. X
  393. X    NOTE: There are an infinite number of Julia sets, each corresponding to
  394. X    one value of c. c is also related to a point in the Mandelbrot set.
  395. X    (originally the Mandelbrot set was the set of c's that will produce a
  396. X    *connected* Julia set.) Note also that the Julia set looks similar to
  397. X    the surroundings of that point in the Mandelbrot set from which the
  398. X    Julia set was derived.
  399. X
  400. X    Becausese these calculations would take a considerable amount of time
  401. X    with any contemporary computer, they are approximated by a finite
  402. X    number of iterations (typically 100 or more). An usual test for a point
  403. X    z going to infinity is to test whether or not | z | < 2. And since few
  404. X    computers can calculate with complex numbers, we can rewrite the
  405. X    equation (z -> z**2 + c) in a C-ish style program using only real
  406. X    variables z = x + y i:
  407. X
  408. X    i = max_iterations;
  409. X
  410. X    while (i > 0 && x**2 + y**2 < 4) {
  411. X
  412. X    tmpx = x**2 - y**2 + x0;
  413. X    tmpy = 2 x y   + y0;
  414. X    x = tmpx;
  415. X    y = tmpy;
  416. X    i--;
  417. X
  418. X    }
  419. X
  420. X    if (i=0) inside (); else outside();
  421. X
  422. X    If you are a first-time user of any Mandelbrot program, I might suggest
  423. X    that you study the edge of the black area, because that is where the
  424. X    most interesting parts of the set are. (The coloured areas do not
  425. X    actually belong to the set, and the interior is, of course, all
  426. X    black...)
  427. X
  428. X
  429. X
  430. X    APPENDIX B: The contour crawling method
  431. X
  432. X    This method works by finding an edge of an area of uniform color, then
  433. X    crawling its way through the edge until starting point is reached. The
  434. X    interior is then assumed to be of same color. This is of course true
  435. X    for the ideal set, but because the image is sampled to a finite set of
  436. X    pixels, errors *may* occur. (Haven't seen one so far, though.)
  437. X
  438. X    Non-connected Julia sets must not be crawled in the strict mathematical
  439. X    sense. However, most of the time mandel produces correct pictures even
  440. X    then. So it is quite safe to use the -c option of mandel.
  441. X
  442. X
  443. X
  444. X    APPENDIX C: Compilation
  445. X
  446. X    Assuming you have a68k v2.61 or higher and blink, the following
  447. X    steps are needed to compile a working executable of mandel:
  448. X
  449. X    a68k gui.asm -q500 -iinclude:
  450. X    a68k brot.asm -q200 -iinclude:
  451. X    a68k pipe.asm -q100
  452. X    blink gui.o brot.o pipe.o to mandel lib amiga.lib
  453. X
  454. X    where include: is assigned to standard assembly include directory.
  455. X
  456. X    NOTE: if you have a68k v2.42, gadget arrow images will not be marked as
  457. X    going to CHIP ram. This will give you strange-looking images unless:
  458. X
  459. X    0)  You have only CHIP ram (poor chap)
  460. X
  461. X    1)  You use FastMemFirst, FixHunk, ATOM etc. kludges
  462. X
  463. X    2)  Modify the code: allocate some CHIP-mem and CopyMem() the images
  464. X        there. This is a kludge, however.
  465. X
  466. X    3)  Get v2.62 somewhere (e.g. disk 314 from Fred Fish's
  467. X        wonderful collection.)
  468. X
  469. X
  470. X
  471. X    APPENDIX D: How to use brot with your own programs?
  472. X
  473. X    Just pass the address of a valid mb-structure in a0 (see mbrot.i),
  474. X    `jsr MandelBrot' and `XREF MandelBrot' somewhere in your code and
  475. X    (b)link your proggie with brot.o and pipe.o. The RastPort you use
  476. X    *must* have valid TmpRas and AreaInfo structures attached to it.
  477. X    AreaInfo should carry as many vectors as possible (no more than 6553,
  478. X    however, since that seems to be a maximum)
  479. X
  480. X
  481. END_OF_FILE
  482. if test 14242 -ne `wc -c <'mandel.doc'`; then
  483.     echo shar: \"'mandel.doc'\" unpacked with wrong size!
  484. fi
  485. # end of 'mandel.doc'
  486. fi
  487. if test -f 'mandel.doc.uu' -a "${1}" != "-c" ; then 
  488.   echo shar: Will not clobber existing file \"'mandel.doc.uu'\"
  489. else
  490. echo shar: Extracting \"'mandel.doc.uu'\" \(585 characters\)
  491. sed "s/^X//" >'mandel.doc.uu' <<'END_OF_FILE'
  492. Xbegin 666 mandel.doc.info
  493. XMXQ```0``````?@`1`#``%@`$``,``0#!--@`````````````````````````>
  494. XM````!,,`P4(8`````````#(````&```````````````````````P`!8``@#$F
  495. XM2C@#``````#_______^#_______)_____W_)G)1.1AG)*92U2S/)*92TRSF#A
  496. XMG,RV2X/_____________________________________________________$
  497. XM_________S___QG$LP___G*<93___Y&<XS___CC$\9__________________-
  498. XM______\```````!\```````V`````(`V8VNQN>8VUFM*M,PVUFM+-,9\8S-)9
  499. XMM'P``````````````````P``````#8``````!H``````,P`````&68`````,D
  500. XMR````,`><.8[3/`S(8UCFL`!@&YC',```<<[#F``````````````````````P
  501. X9```````3<WES.G5T:6QI=&EE<R]M;W)E`,<[L
  502. X``
  503. Xend
  504. Xsize 385
  505. END_OF_FILE
  506. if test 585 -ne `wc -c <'mandel.doc.uu'`; then
  507.     echo shar: \"'mandel.doc.uu'\" unpacked with wrong size!
  508. fi
  509. # end of 'mandel.doc.uu'
  510. fi
  511. if test -f 'mandel.info.uu' -a "${1}" != "-c" ; then 
  512.   echo shar: Will not clobber existing file \"'mandel.info.uu'\"
  513. else
  514. echo shar: Extracting \"'mandel.info.uu'\" \(951 characters\)
  515. sed "s/^X//" >'mandel.info.uu' <<'END_OF_FILE'
  516. Xbegin 666 mandel.info
  517. XMXQ```0``````(``/`#``%@`&``,``0#!W_@`PW4X````````````````````[
  518. XM`````_X`P3*8`````/___]0````$```````````````````````P`!8``@`!J
  519. XM83`#``````#____________________________________^?______^?___M
  520. XM__^`!?____\``?____X``/___P0``/___````?___````?___P0``/____X`N
  521. XM`/____^``?____^`!?_____^?______^?___________________________<
  522. XM______\````````````````````!```````#P``````'X`````#_^0````'_>
  523. XM_X``!`?__X``!____X``#____X``?____P``?____P``#____X``!____X``@
  524. XM!`?__X````'__X````#_^0`````'X``````#P``````!````````````````K
  525. XM`````````#``%@`"``%B.`,``````/___________________________[__/
  526. XM_____Y_^_____P?=_____X8"'_____@#_____0:W____T`/_____X`/_____V
  527. XMX`?_____X`?_____X`O____P8+____[@'_____Q`,?____\UX/____]__W__K
  528. XM_____?___________________P```````````````````````````?``````<
  529. XM`___@````___P````___\```'___^```?___````___X````___@```!__^`8
  530. XM```'__^````?__\```#___\``!____````___^````/__\````#__\``````8
  531. X5!X````````````````````````$`(
  532. X``
  533. Xend
  534. Xsize 651
  535. END_OF_FILE
  536. if test 951 -ne `wc -c <'mandel.info.uu'`; then
  537.     echo shar: \"'mandel.info.uu'\" unpacked with wrong size!
  538. fi
  539. # end of 'mandel.info.uu'
  540. fi
  541. if test -f 'mandel.uu' -a "${1}" != "-c" ; then 
  542.   echo shar: Will not clobber existing file \"'mandel.uu'\"
  543. else
  544. echo shar: Extracting \"'mandel.uu'\" \(22144 characters\)
  545. sed "s/^X//" >'mandel.uu' <<'END_OF_FILE'
  546. Xbegin 666 mandel
  547. XM```#\P`````````&``````````4```?[```$'D```/(```!'````/```````:
  548. XM``/I```'^TCG?_XF2#8`D\DL>0````1.KO[:($`@*`"L9RI",S#_0KD````H#
  549. XM($#1R-'((&@`$-'(T<@0&"/(````+$B`,\````!.8#I'Z`!<($M.KOZ`($M.G
  550. XMKOZ,(\`````H($`@*``D9QP@0"00(&@`!"/(````+'+_4D%*&&;Z,\$```!.1
  551. XM0_D```P6<`!.KOW8(\`````(9AI(YP$&+CP``X`'+'@`!$ZN_Y1,WV"`8``'=
  552. XM.DJY````*&<2(@(L>0````A.KO^"+'D````$0_D```P$<`!.KOW8(\`````$)
  553. XM9AI(YP$&+CP``X`$+'@`!$ZN_Y1,WV"`8``&4$/Y```+\W``3J[]V"/`````]
  554. XM`&8:2.<!!BX\``.``BQX``1.KO^43-]@@&``!AA!^0``##MP`4/Y````RG(`/
  555. XM3J[^1$H`9QI(YP$&+CP`!(`5+'@`!$ZN_Y1,WV"`8``%W$7Y````\A5\``0`*
  556. XM"$(J``E"J@`*%7P````.</\3_``!```!%4ZN_K9*`&L`!:050``/D\E.KO[:)
  557. XM)4``$$'J`!0@B%B00J@`!"%(``A!^0```,HA2@`.0KD````<($M)^0```'PY9
  558. XM?````!PY?````!XY?`$_`"`Y?`#_`"(3_``````!%3E\`&0`*!E\`!@`+!/\D
  559. XM``$```$4$_P``````19".0```1=">0```$Q".0```1@C_``!``````!((_P`Q
  560. XM!@``````."/\`````````$`C_`````````!$*7P``````!0I?```````&$/YR
  561. XM```64BE)`"0Y?``>`"I*N0```"AG``"2+'D````$0_D```PB<`!.KOW82H!FC
  562. XM#!/\``@```$58```[BQ`('D````L3J[_LDJ`9@H3_``)```!%6`\*D!%^0``1
  563. XM"<9'^0``">9*$V<D(&T`-B)+3J[_H"):2H!G!B!`3I%G!DH;9OQ@X!/\``H`P
  564. XM``$5($U.KO^F(DXL>0````1.KOYB2CD```$59@`$0&!^1_D```Q()CP```+UG
  565. XM2A!G;@P0`#]G4A/\``(```$51_D```Z()CP```"U$!AG4`P``"!G]@P```AGZ
  566. XM\`P``"UF*!`80_D```FX1?D```F$#```864$!```("I:L!EF!DZ59P9@QDH1K
  567. XM9O`L>0````A.KO_$(@`D"TZN_]!@``.L0?D```$`+'D````$3J[_.A/\``,`8
  568. XM``$5(\`````09P`#BB1`(\H```$Z(\H```%J1^H`+$'Y```!'$ZN_S03_``$7
  569. XM```!%2/`````%&<``U(@0"1H`#(HBB!+0_D```#`<"`L>0````!.KO]`(#P`,
  570. XM`"@`<@(D`2QY````!$ZN_SH3_``%```!%2/`````(&<``P!'^0```*HB0"!+M
  571. XM(`(L>0````!.KOXL)4L`#"`\``!__7(`+'D````$3J[_.B/`````)&<``K1'\
  572. XM^0```+(@2R)`(#P``!F9+'D`````3J[^YB5+`!`3_``````!%2`Y````."(\?
  573. XM`!T``+"!8P(@`2(\``4``+"!9`(@`2/`````.&$`$.(C^0```#@````\($Q.G
  574. XMN0``&@!*.0```11G``(.80`&A$'Y```!3"QY````!$ZN_S0CP````!AG``($4
  575. XM'CD```$6$_P``@```18@.0```$!A``F,(#D```!$80`)RB`Y````.&$`"K`P2
  576. XM+``H80`*<B`Y````2&$`"?83QP```19A``L*80`+:F$`#WYF``&(+'D````$U
  577. XM#((```(`9E(@>0```!@CZ``$```!3$ZN_[A"N0```!@@>0```!!P`$ZN_N9AU
  578. XM``*X80`/0&8``5X,@@````AF\&$``SX@>0```!!P`2QY````!$ZN_N9@`/\TS
  579. XM#((````09@9A``X.8(H,@@````AF*`Q#`&AF$&$`#0AG`/]V:P`!`&```)H,&
  580. XM0P!I9@QA``N$9@``[F``_UP,0@`@9B(R+0`F,`$"0$``9PQA``7,9@``T&``&
  581. XM_T9A``:$:V)F``#"#((```0`9E(,0P`A9DP(!``#9T8@>0```!@CZ``$```!.
  582. XM3$ZN_[A"N0```!@@>0```!!P`$ZN_N9A``'L80`36&$``GX@>0```!!P`2QY%
  583. XM````!$ZN_N9@`/YT8`#^UB!Y````&"QY````!"/H``0```%,3J[_N&$``:X,O
  584. XM.0`````!%F<L##D``0```19G+B/\``8``````#@C_`````````!`(_P`````P
  585. XM````1&``_=8@.0```$C1N0```#A@`/W&('D````8+'D````$3J[_N&$``51**
  586. XM.0```11F#$HY```!&&<$80`2L"!Y````$'``+'D````$3J[^YB)Y````)"`\G
  587. XM``!__2QY````!$ZN_RXB>0```"`@/```*``L>0````1.KO\N+'D````$('D`A
  588. XM```43J[_N"!Y````$$ZN_[Y!^0```/(0*``/+'D````$3J[^L$/Y````RDZNQ
  589. XM_CXB>0````!.KOYB(GD````$3J[^8DHY```!%6=X+'D````(2KD````H9QA!^
  590. XM^0``#STB""0\```#[DZN_^)*@&=48`1.KO_$*``B!"0Y````+#8Y````3DC#D
  591. XM3J[_T"($$#D```$52(#E2$'Y```*`"!P```D"';_4H-*&&;Z3J[_T$JY````?
  592. XM*&<,<F1.KO\Z(@1.KO_<+'D````$(GD````(3J[^8B`Y````*&<*3J[_?")`6
  593. XM3J[^AG``$#D```$59P)P%$S??_Y.=4HY```!%V<``(1(Y^#B+'D````$('D`@
  594. XM```4)&@`,C`Y````4#(Y````4B)Y````7&%<,#D```!4,CD```!6(GD```!@U
  595. XM84@P.0```%0R.0```%HB>0```&AA-#`Y````6#(Y````5B)Y````9&$@,#D`N
  596. XM``!8,CD```!:(GD```!L80Q".0```1=,WT<'3G4@2B0)9P1.KO^43G5A`/]DX
  597. XM##D``````19G'`PY``(```$69P`"="`Y````.+"Y````/&8``F1(Y__B(#D`%
  598. XM``!P(CD```!T$_P``0```1<CP````'`CP0```'0D/```@`#0@M*"*``J`4A`S
  599. XM2$%T`"QY````!$/Y```(`"!Y````%"1H`#*P;``<;`PP+``<0_D```B@4D*PE
  600. XM;``@;PPP+``@0_D```C44D*R;``>;`PR+``>0_D```D(4D*R;``B;PPR+``B[
  601. XM0_D```D\4D(,0@`!8PA"N0```%Q@&#/`````4#/!````4B!*(\D```!<3J[_4
  602. XME#`L`""0;``<)CD```!(##D``0```19F`G8`!H,``0``:P`!:'(`=`!A``PJE
  603. XM+``P+``BD&P`'F$`#!PN`"0$)@64AI:'V(;:ATA"2$-(1$A%?``P+``<,BP`$
  604. XM(+1`;`8T``C&``"T06X``2*X06\&.`$(Q@`!N$!M``$2,"P`'C(L`"*V0&P&>
  605. XM-@`(Q@`"MD%N``#ZND%O!CH!",8``[I`;0``ZC/"````5#/#````5C/$````^
  606. XM6#/%````6DCG`!Q#^0``"#!'^0``"&A)^0``"$Q+^0``"(0(!@``9PA#^0``X
  607. XM"*`F20@&``%G"$GY```(U"I,"`8``F<(0_D```D(*$D(!@`#9PA'^0``"3PJ5
  608. XM2T8&$`8"```%9@*3R1`&`@``"68"E\L0!@(```9F`IG,`@8`"F8"F\T@2B/)&
  609. XM````8&<(,`(R`TZN_Y0B2R!*(\D```!H9P@P`C(%3J[_E"),($HCR0```&1GF
  610. XM"#`$,@-.KO^4(DT@2B/)````;&<(,`0R!4ZN_Y1,WS@`8!A"N0```&!"N0``+
  611. XM`&A"N0```&1"N0```&Q,WT?_3G5(Y_@`)"P`#"@Y````0)BL``0,@@`!``!E"
  612. XM!N**XHQ@\HC"(`1"0(#"2$`P!"0L`!`H+``(F+D```!$#((``0``90;BBN*,%
  613. XM8/*(PB($0D&"PDA!,@1(0$A!(\````!P(\$```!T3-\`'TYU`D&/_R)-80`(Z
  614. XM\B!I`"(@4`Q!``!G+`Q!``%G2@Q!``)G``"$#$$``V=@80`+@F<$2A!G!#`LW
  615. XM`"@Y0``H80`#E&!^80`*W&<$2A!G!B`Y````0"/`````0&$`_SQA``)R80#\B
  616. XMIF!:80`*N&<$2A!G!B`Y````1"/`````1&$`_QAA``*680#\@F`V80`$[F<$=
  617. XM2A!G!B`Y````2"/`````2&$``KY@&F$`"Y!G!$H09P8@.0```#@CP````#AAI
  618. XM``-*<`!.=3`!`D`@`&=.`D&/_Q`\```,00`%9PX0/``!#$$`!F<$$#P``A/`8
  619. XM```!%F$``_(@.0```#`B.0```#0D"B8+(\H````P(\L````T3J[_FDI`9P)P;
  620. XM_TYU,`$"0!``9QX"08__"*P``@`L#$$`"&<&".P``@`L80`#1'``3G4,00`*3
  621. XM9B@@.0```#`B.0```#0D"B8+(\H````P(\L````T3J[_FDI`9P)P`4YU`D&/2
  622. XM_WX`/@%A``"$0_D```#*2$<@/``&&H!*1V<6(#P``8:@#$<`"64*(#P``$X@8
  623. XM/CS__E)'2$<S?``)`!PC?```````("-``"0CR0```!PL>0````1.KOXR80`'^
  624. XM,&8*#$(``V>B?@!@`GX!(GD````<3J[^(")Y````'$ZN_B9"N0```!Q*1TYUL
  625. XM<`!.=4CGP``P!W(!`D!__PQ```!F+"`L``Q(04I':@1$@$2!T;D```!`T[D`I
  626. XM``!P(#D```!`80``H&$`^M1@``"2#$```68J("P`$$A!2D=J!$2`1('1N0``_
  627. XM`$23N0```'0@.0```$1A``"V80#ZHF!@#$```F8>(#P``!F92D=J`D2`T;D`@
  628. XM```X(#D````X80`!?F`\#$```V8>(#P``!F92D=J`D2`T;D```!((#D```!(:
  629. XM80``LF`8#$``!&822D=J`D2!TVP`*#`L`"AA``$*3-\``TYU2.?A\B1Y````\
  630. XM&$?Y```!?`@L``(`+&8$*4``%"0`($HB2RQY````!$ZN_QS!0B!K`"(@4"XL3
  631. XM``QA``580A!A``%*3-]/ATYU2.?A\B1Y````&$?Y```!X`@L``(`+&8$*4``9
  632. XM&"0`($HB2RQY````!$ZN_QS!0B!K`"(@4"XL`!!A``400A!A``$"3-]/ATYU-
  633. XM2.?@\B1Y````&$?Y```#^"0`($HB2RQY````!$ZN_QS!0B!K`"(@4!(\`"M*/
  634. XM@&H&1(`2/``M$,%A``0P0A!A``"Z##D``0```19F'"`Y````/"/`````.&%.`
  635. XM$_P``````19A``$>8`1A`/D^3-]/!TYU2.?@\B1Y````&$?Y```$V"0`($HBH
  636. XM2RQY````!$ZN_QS!0B!K`"(@4&$``Y9"$&%83-]/!TYU2.?@\B1Y````&$?YJ
  637. XM```#&"0`($HB2RQY````!$ZN_QS!0B!K`"(@4&$``YA"$&$B##D``````19F)
  638. XM#A/\``$```$680``EF`$80#XMDS?3P=.=2!K`")":``(0F@`#"!*(DL@`DZNM
  639. XM_]8@2R)*E<IP`4ZN_E!.=4CGX/8L>0````0@>0```!@J2$/Y```&/"9)<`).'
  640. XMKOY$0_D```9H""P``@`L9PX`:0"```P":_]_``Q@#`)I_W\`#`!K`(``#"!-B
  641. XM(DN5RG("3J[^2B!+(DUP`DZN_E!,WV\'3G5(Y^#V+'D````$('D````8*DA#2
  642. XM^0``!;@F27`#3J[^1$7Y```%Y$/Y```&$!(Y```!%@P!``%G&@P!``)G*`!K)
  643. XM`(``#`)J_W\`#`)I_W\`#&`F`FO_?P`,`&H`@``,`FG_?P`,8!(":_]_``P"*
  644. XM:O]_``P`:0"```P@32)+E<IR`TZN_DH@2R)-<`-.KOY03-]O!V$`]Y).=1`8H
  645. XM#```*V<(#```+6<(4XAA``:L3G5A``:F9P)$@$YU0CD```$680#_0#`%,@9(C
  646. XMYP8`2$5(1D)%0D9A``$<3-\`8#/%````>#/&````>DCGP`!A``-63-\``V8``
  647. XM`/H,@@```!!GW$CGY@!(Y\``D'D```!X:@)$0))Y````>FH"1$%F!$I`9S0T)
  648. XM+``@E&P`'$A`0D"`PF@"</\T+``BE&P`'DA!0D&"PF@"<O^P06(",`%A``18;
  649. XM(\````!(3-\``SHY````>#PY````>MI`W$%(14A&0D5"1B(L``PD+``0XHGB;
  650. XMBN*-2D5K`G(`XHY*1FL"=``CQ0```'`CQ@```'1(14A&80`!LMJ!G((CQ0``-
  651. XM`$`CQ@```$0@!6$`_#H@!F$`_'P@.0```$AA`/RZ3-\`9TJ"9AYA``)(9AH,Y
  652. XM@@```!!F$#/%````>#/&````>F``_PQP`$YU+P`CQ0```'`CQ@```'1(14A&(
  653. XM80`!3"/%````0"/&````1"`%80#[V"`&80#\&F$`]@8@'TYU(#D````P(CD`\
  654. XM```T)`HF"R/*````,"/+````-$ZN_YI*0&92,\4```!X,\8```!Z80`!ZF90.
  655. XM#((````09^9(YP8`2$5(1D)%0D9A`/]^3-\`8$J"9AQA``&:9BH,@@```!!F1
  656. XM#C/%````>#/&````>F#$<`!@$DA%2$9"14)&80#_2G`!8`)P_TYU2.?@`#(\-
  657. XM)Q!T``*```#__X#!9@1*0F<(!@``,!#`=`%(0$C!@OP`"F;@2D)F!!#\`#!,I
  658. XMWP`'3G5(Y^``(@!(0&&^$/P`+G0#POP`"DA!!@$`,!#!2$%1RO_P2D%J!&$`X
  659. XM`.A,WP`'3G5A-D'Y```+V2`%+BP`#&%8$/P`("`&+BP`$&%,0A@@>0```!!!#
  660. XMZ`!40_D```EP<%!R`$ZN_RA.=2\`,`7*[``,2$5"1<#L``[:@-JL``0P!LSL/
  661. XM`!!(1D)&P.P`$MR`1(;<K``((!].=4CG_G`4/``K2H!J!A0\`"U$@!#"%#P`1
  662. XM,`R`(````&4*!(`@````4@)@[A#"$/P`+D/Y````!$7Y````1"9\_____W(`O
  663. XM%#P`,"89*!HJ`"P!G(2;@VL((`4B!E("8.Z^BR9I__QB!!#"8-H,`@`U90)A(
  664. XM!DS?#G].=4CG@(`0(`P``"YG^`P``#EF!A"\`#!@[%(03-\!`4YU2.?`P&$DX
  665. XM9AQ*@F86",``#"QY````!$ZN_L((```,9@1@XG``3-\#`TYU+'D````$=``@D
  666. XM>0```!0@:`!6$"@`#P'"3J[^C$J`9CP@>0```!@@"&<2(&@`5A`H``\!PDZN=
  667. XM_HQ*@&8@(GD````<(`EG$B!I``X0*``/`<).KOXL2H!F0L%"3G4B0"0I`!0VK
  668. XM*0`8."D`&BII`!PZ*0`@/"D`(B1I`"0F:0`H3J[^A@R"```$`&8B#$,`,V8<[
  669. XM"`0``V<6<`%.=2)Y````'$ZN_B9"N0```!QT`W``3G4P/"``<@!T`"8Y````I
  670. XM.&%>*4``#"E``!`P+``<T&P`("(Y````0"0L``SB2&0&)@+B@Y*#2D!G!I*"Q
  671. XM4T!@]BE!``0P+``>T&P`(B(Y````1"0L`!#B2&0&)@+B@]*#2D!G!M*"4T!@B
  672. XM]BE!``A.=4CG>(!(0TI#9PKB2.)1XE)30V#T2$-!^0```(`X&.-#9!3`Q,+$3
  673. XMQ,1(0M1!2$'30$A`>`#11$I#9N)(0#`!3-\!'DYU2.=X@'(`2D!K!E)!XTA@E
  674. XM]DA!0?D```"@=`_C2388>``X`$A$QL#8@V4,``$``4A$:@)21#`$4<K_XB`!%
  675. XM3-\!'DYU2.?`PBQY````!"!Y````%"!H`%9.KOZ,2H!G*B)`#*D```0``!1FH
  676. XM&@QI`#,`&&82,"D`&@@```-G"$ZN_H9P_V`03J[^AG``<@!.KO[."```#$S?'
  677. XM0P-.=4CG?'`F2'(`=@`D/(````!#^0````!%^0```$`0&`P``"MG^`P``"UFQ
  678. XM!@C#``]@[`P``"YF!@C#``=@X`P``#!E,@P``#EB+`C#``"UB4H#:PQ#^0``3
  679. XM``!%^0```$`$```Q:[A(@"@1*A+4A=.$4<C_^F"H4XAA3DI#:@)$@2`!"`,`1
  680. XM`&8"($M,WPX^3G5(YV!`(DAT`'``$A@,`0`P918,`0`Y8A`$`0`P2('`_``*(
  681. XMT$%T`6#B4XAA#$I"9@(@24S?`@9.=2\`$!@,```@9_A3B"`?3G5A`/\H9PHC^
  682. XMP````$!P`4YU0CD```$4<`%.=6$`_PYG""/`````1'`!3G5A%F<*(\`````XS
  683. XM<`%.=0BL``(`+'`!3G5(YV!@)$EA`/]N2$`,&``N9C)R`'0`0D`4&%)`#`(`:
  684. XM,&4&#`(`.6/P0^C__U-`9Q(4(00"`#!(03("2$&"_``*8.HP`5.(80#_9@R`+
  685. XM`!T``&($<@%@!'``(DI,WP8&3G5A`/\49P8Y0``H<`%.=0BL``,`+`BL````]
  686. XM+'`!3G4(K``#`"P([````"QP`4YU".P``P`L<`%.=0BL``0`+`CL``$`+'`!D
  687. XM3G4(K``$`"P(K``!`"QP`4YU".P`!``L<`%.=1/\``$```$43G40&`P``&%EV
  688. XM!`0``"`,``!89@YA`/X(9P8I0``4<`%.=0P``%EF#F$`_?1G!BE``!AP`4YU2
  689. XM4X@([``"`"QP`4YU0_D```]D$!AG"@P``"!G!!+`8/)3B$(1(\D``!!T80#^Q
  690. XM@A`\``$3P````1A.=1`89V0,``!A900$```@2'K_\`P``$QG`/\<#```2&<`Q
  691. XM_R0,``!!9P#_+`P``$-G`/\N#```5V<`_S8,``!09P#_/@P``$=G`/]`#```I
  692. XM2F<`_W@,``!-9P#^9`P``%AG`/XT6(]P`$YU<`%.=4'Y```/9"0(('D``!!T+
  693. XM,#D```!,9P9A`/F<0A!2>0```$Q#^0``#"]P`"QY````!$ZN_=A*@&=6+$`@U
  694. XM>0```!`D:``P)&H`!")H`%@@0C(L`!PT+``>-BP`(#@L`"+F25Y#YDN609A"-
  695. XM4D-21'`!3J[_N"0`(DXL>0````1.KOYB2H)F$A/\``<```$58`@3_``&```!6
  696. XM%4YU2.?__BA(+'D````$0_D``!_%<`!.KOW82H!G``",+$`(+``#`"QG(`CL%
  697. XM````+`RL``0````,91`,K``$````$&4&"*P````L""P`!``L9R@([``!`"P(<
  698. XM+``"`"QG&BPL`!0N+``8-BP`*&$``PY*0VL&"*P``0`L*E0B33`\``!.KOZJ1
  699. XM(DTP+``<,BP`'C0L`"`V+``B3J[^S@@L``$`+&<$85Y@`F$2(DXL>0````1.V
  700. XMKOYB3-]__TYU."P`'#HL`!X\!#XL`"`V+``B80`![&$``]YF*E)$N$=E\&$`W
  701. XM`=Q21;I#8AIA``'280`#Q&804T2X1F+P80`!PE)%ND-CS$YU,"P`'@!`P`!(2
  702. XM0#`L`!QA#F8&80`$PF;V80`$R$YU2.?_`#@`2$`Z``)%/_\V``)#P`!A``$HX
  703. XM2D!J1#P$/@4T`R)-(`0B!6$``WIA1")-(`0B!6$``Y)A``-69B:\1&;JOD5F>
  704. XMYK1#9N(B32`$(@5.KO["(DU.KOZJ(DUA``0D<`!@"")-80`$&G#_3-\`_TYU(
  705. XM2.>C`&$``2(T`#P$/@5A?&$``1:T0&<P2D-J!`I#0``&0T``:@0*0T``2D!KN
  706. XM%$J`:Q`P!8!#"D#``$A`,`1A``0,.`8Z!V`^/`0^!6%>80``V+1`9QY*0&L4B
  707. XM2H!K$#`%@$,*0,``2$`P!&$``^`X!CH'8!)*0VH$"D-```9#P`!J!`I#0`!,0
  708. XMWP#%3G5*0VL."`,`#F8$4T5.=5-$3G4(`P`.9@121$YU4D5.=4I#:PX(`P`.Z
  709. XM9@121$YU4T5.=0@#``YF!%)%3G531$YU+P-V`%-$81Z&0%1$81B&0%-$4T5A`
  710. XM$(9`5$5A"H9`4T4P`R8?3G5(YT#`<`"X;``<922X;``@8AZZ;``>91BZ;``BH
  711. XM8A(B32`$(@5.KO["#$```&8"</],WP,"3G5(YW/`=`!P_[AL`!QE``"DN&P`R
  712. XM(&(``)RZ;``>90``E+IL`")B``",-@0\`\SL``Q(1CP\``#&[``.W(/<K``$_
  713. XM:P0T/$``(DT@!"(%3J[^P@C``!\,0```9E@V!3X#SNP`$$A'/CP``,;L`!+>W
  714. XM@T2'WJP`"#8L`"A50VH"=@!A0`Q#__]G$`*#``#__X;L`"I(0U1#8`0V/``!A
  715. XM,`,B34ZN_JHP!#(%(DU.KOZ\,`,(@``?#$```6<"@$),WP/.3G4(+````"QGN
  716. XM``"T2.?O`"@&*@<(+``"`"QG""PL`!0N+``8(`1A3B0!T(!I0"`%8430@&DX,
  717. XM(`'0@FDRE('4AFDN(`0B!6$PTH%I)-*':2`J`2@"4<O_SB`$81HD`="`:0P@9
  718. XM!6$0T(!I!-*":`)20TS?`/=.=2(`2.<\`"0`:@)$@$J!:@1$@4:"-@'&P'H=F
  719. XMZJM(0#@!R,!Z#>JLUH1(03@!R,#GC-:$2$#"P.JIUH%*@FH"1(,B`TS?`#Q.Y
  720. XM=4CG[P!(1DA'.`8Z!P@L``(`+&<(/"P`%#XL`!@P!#(`P\#G@4A!-`'00&E&,
  721. XM,`4R`,/`YX%(0=!`:3@P`=!":3*40=1&:2XP!#(%P\#G@4A!TD%I(-)':1PZ#
  722. XM`3@"4<O_OLO%R<38A6D*V(38A&D$V(1H`E)#3-\`]TYU2.>`@"`L`"1G!"!`0
  723. XM3I!,WP$!3G4SP```'\`SP0``'\(SP```'[PSP0``'[Y".0``'\1.KO\$3G5(\
  724. XMYS``849*.0``'\1J+#0`-@$P.0``'[PR.0``'[XSP```'\`SP0``'\).KO[^0
  725. XM,`(R`T(Y```?Q&$2,\```!^\,\$``!^^3-\`#$YU-#D``!_`-CD``!_"E$"67
  726. XM04I":@1$0D1#2D-J!$1"1$-*0F<::@C60F8@=`1@'DI#9PBV0F84=`)@$G0!N
  727. XM8`Y*0V<$=`-@!G0`8`)T_Q8Y```?Q&<22@)G%+8"9Q`3_`#_```?Q$YU$\(`V
  728. XM`!_$3G4O"3`Y```?O#(Y```?ODZN_OXB7TZN_OA.=0```````````&=R87!HJ
  729. XM:6-S+FQI8G)A<GD`3G%.^0```&A.^0````!.^0```+1P80```^P````7````I
  730. XM````&@X``![&```>S```'M(``![8```>W@``'O```![\```?`@``'P@``!\.U
  731. XM```?'```'R0``!\J```?-@``'SP``!^"```?E```'YP``!^F```?K```!(P`F
  732. XM``)"````/`````$```""````R@```/@```$F```"8@```IH```*@```"[```\
  733. XM`PH```,N```#-````VH```..```#E````YX```/$```$H```!20```7P```&Z
  734. XM0```!UP```>:```(_```"18```DH```).@``"4P```HX```*/@``"D0```I*<
  735. XM```*5@``"F0```IR```*@```#F8```ZN```.]@``#V@```^>```0'```$"H`2
  736. XM`!"````0C@``$)0``!.(```3K@``%!X``!0D```5Y```%B0``!:\```6P@``U
  737. XM%OX``!<$```8T```&.@``!EJ```9<@``&8P```$%`````P```"(````X````M
  738. XM0````%@```!N````?````(X```"P````N@```-8```$$```!+@```5@```%V4
  739. XM```!I````:X```&V```!U@```>H```'R```!^````?X```($```"#@```A@`H
  740. XM``(B```"+````E(```)T```"@````I````+(```"X````P0```-4```#<```M
  741. XM`WP```."```#J@```[````/,```#[````_(```/\```$"```!"@```0R```$(
  742. XM0@``!%(```18```$=@``!(````2$```$D@``!*8```2P```$N@``!,(```3(^
  743. XM```$T@``!-P```3N```$^```!0X```4<```%+@``!30```58```%8```!>@`S
  744. XM``7Z```&````!A@```8@```&,@``!C@```90```&6@``!F8```9P```&>@``7
  745. XM!H0```:*```&E```!IH```:H```&L```!KP```;$```&S@``!N0```;Z```')
  746. XM````!PH```<4```'*```!S(```<\```'1@``!TX```=4```'?```!X(```>0W
  747. XM```'L@``!\P```?6```'Z@``!_H```@(```(#@``"!@```@>```()```""P`G
  748. XM``@R```(.```"$````A&```(3```"%0```A:```(8```"&@```AN```(=```L
  749. XM"'P```B:```(I```"*X```BT```(P@``",@```C0```(U@``"-P```CV```)_
  750. XM`@``"5H```EB```):```"7````F"```)B@``"AP```HB```**```"BX```JR0
  751. XM```*Q@``"MH```KN```+!```"PH```L0```+%@``"RH```M6```+>@``"X``R
  752. XM``O8```+W@``"_P```P"```,(```#"8```P\```,0@``#'0```Q^```,A```O
  753. XM#(X```R4```,T@``#-@```SB```,Z```#08```U$```-9@``#7````UZ```-&
  754. XMJ```#:X```VT```-V@``#>````WF```."```#@X```XL```.,@``#F````Y^1
  755. XM```.J```#L8```[P```/`@``#S````\X```//@``#T@```]B```/=```#Y@`>
  756. XM``^J```/Q@``#]```!`.```0%```$'(``!!X```0F@``$28``!%(```13@``2
  757. XM$70``!%^```1O```$<8``!',```1^@``$@```!(2```2&```$BH``!)*```2J
  758. XM4```$F```!)F```2=```$GH``!*4```2F@``$J0``!*J```2N```$KX``!+XT
  759. XM```2_@``$Z0``!2X```4T```%.P``!5*```55```%6@``!6````5J@``%EX`$
  760. XM`!>(```7D@``%Z(``!>P```8B```&/8``!EX```9A@``&:0``!GP```9^@``_
  761. XM``,````$```?X```'^8``!_:`````````_(```/J```$'B`````#,S,S`%'K`
  762. XMA0`(,28``-&W```4^````A@````U````!0``````````````````````````,
  763. XM````````````````,S,S,QZX4>OI>-3]%UCB&;6(XVC>]!:]K^4U>5YCN(R)W
  764. XM<%]!#;YO[`%?U_X`(R\S``.$N```6A(```D!M0771>K!]27ZA/T^_I[_3_^G)
  765. XM_]3_ZO_U__K__?____]J"C!P%RP+5@6;`LH!9`"R`%D`+``6``L`!@`#``$`,
  766. XM`0B(```/``\P#V`/D`_`#_`,\`GP!O`#\`#P`/,`]@#Y`/P`_P#/`)\`;P`_"
  767. XM``\##P8/"0\,#P\/#PP/"0\&#P,``````4`!```%`0(````/````````"\X`3
  768. XM``````````%``0`!`@``!!@``QL```````````````````````````#_____[
  769. XM_____P`/`!0`%`"4`%`!`@``!F```P`*```!?`````````````````````#_)
  770. XM_________P`/```!X``G``T`:``(`````P`$```"1`````````',````````G
  771. XM`:A```````````N2``````````T````````````````````````````````!4
  772. XM`@``__8```````````O$`````````F@`)P`:`&@`"`````,`!````D0`````N
  773. XM```",`````````(,0`$````````+GP`````````-````````````````````X
  774. XM`````````````0(``/_V```````````+Q@````#__O_^`0``!0```E0`````?
  775. XM``````!K````:P`+````"P````````*4``H`"P`+``8`!``#``$```;`````V
  776. XM```````````````````!`````````L``"@`>``L`!@`$``,``0``!M0`````>
  777. XM````````````````@`$````````"[``#`!(`!@`+``0``P`!```&Z```````+
  778. XM``````````````"```````````,8`!8`$@`&``L`!``#``$```;\````````>
  779. XM`````````````````````````Z``%P`J`"@`"`````,`!````WP````````#=
  780. XM:`````````-$0`(````````+K``````````)````````````````````````Q
  781. XM`````````0(``/_N```````````+R`````#__O_^`0``!0```XP`````````2
  782. XM```K````*P`+````"P````````/,``X`*``&``L`!``#``$```;H````````X
  783. XM```````````````"`````````_@`0@`H``8`"P`$``,``0``!OP`````````"
  784. XM````````````@`(````````$@``7`#<`*``(```$`P`$```$7`````````1([
  785. XM````````!"1``P````````NU``````````D`````````````````````````T
  786. XM```````!`@``_^X```````````O*`````/_^__X!```%```$;```````````U
  787. XM`"L````K``L````+````````!*P`#@`U``8`"P`$``,``0``!N@`````````F
  788. XM``````````````,````````$V`!"`#4`!@`+``0``P`!```&_```````````Q
  789. XM``````````"``P````````5@`!L`1``@``@```0#``0```4\````````!2@`H
  790. XM```````%!$`$````````"[X`````````!@``````````````````````````<
  791. XM``````$"``#_Z@``````````"\P`````__[__@$```4```5,````````````4
  792. XM(P```",`"P````L````````%C``2`$(`!@`+``0``P`!```&Z```````````(
  793. XM``````````"`!`````````6X`#X`0@`&``L`!``#``$```;\````````````<
  794. XM```````````$````````!>0`20`H`"``#``&``(``0``!Q````<D````````5
  795. XM````````(`4````````&$`!)`#4`(``,``8``@`!```'.```!TP``````````
  796. XM```````@!@````````8\`$D`0@`@``P`!@`"``$```=@```'=```````````*
  797. XM`````"`'````````!F@`:@`H`!,`&0`&``(``0``![````?$````````````>
  798. XM````$`@````````&E`!^`"@`$P`9``8``@`!```'B```!YP`````````````_
  799. XM```0"0```````````&H`0@`G``P`!@`#``$```?8```'[```````````````4
  800. XM```*````````````"P`&``4``````P`````````````+``8`!0```!@#````4
  801. XM``````````8`"P`%````,`,`````````````!@`+``4```!<`P``````````^
  802. XM```@``P`!0```(@!`````````````"``#``%````B`,`````````````(``,B
  803. XM``4```#H`0`````````````@``P`!0```.@#`````````````"``#``%```!\
  804. XM2`$`````````````(``,``4```%(`P`````````````3`!D`!0```G`!````J
  805. XM`````````!,`&0`%```"<`,`````````````$P`9``4```&H`0``````````!
  806. XM```3`!D`!0```:@#`````````````"<`#``%```#.`$`````````````)P`,$
  807. XM``4```,X`P```````````!\``@(```@0```(&/_V````"@```````!\``@(``
  808. XM``@H````````__8````*`````!\``@,```A```````````H```````H`````O
  809. XM```?``(#```(7``````````*`````/_V````````'P`"`P``"'@```````#_J
  810. XM]@``````"@```````!\``@,```B4````````__8`````__8````````?``(#.
  811. XM```(L```"+P`!0`%```````%__L`````'P`"`@``",P```````$````*````'
  812. XM````'P`"`P``".0```CP__L`!0````#_^__[`````!\``@(```D``````/__E
  813. XM``#_]@```````!\``@,```D8```))/_[``4```````4`!0`````?``("```)<
  814. XM-``````````!````"@`````?``(#```)3```"5C_^__[```````%__L`````,
  815. XM'P`"`@``"6@```````#__P``__8!`@$```$``0````````O9````````%X``(
  816. XM`!>:```7J@``&"(``!@P```80```&%```!A:```8:@``&'H``!B$```8C@``\
  817. XM&,Y864U)3$A!0U=01TI3````%X```!>:```7J@``&"(``!B@```8M```&/P`K
  818. XM`!C.6`!9`$T`20!*6`!*60!&3$%'4P!3059%``````HL```*+0``"DX```IO,
  819. XM```*B```"J$```J^```*_P``"RT```M,```+=0`Z($-O=6QD(&YO="!A;&QOG
  820. XM8V%T92!S:6=N86P@8FET"@`Z($5R<F]R(&EN(&-O;6UA;F0@;&EN92!O<'1IB
  821. XM;VYS"@`Z($-O=6QD(&YO="!O<&5N('-C<F5E;@H`.B!#;W5L9"!N;W0@;W!E^
  822. XM;B!W:6YD;W<*`#H@0V]U;&0@;F]T(&%L;&]C871E(&UE;6]R>0H`.B!9;W4@1
  823. XM;F5E9"!I9F8N;&EB<F%R>2!I;B!Y;W5R(&QI8G,Z(&1I<F5C=&]R>2!T;R!S)
  824. XM879E('!I8W1U<F5S"@`Z(&EF9BYL:6)R87)Y(')E='5R;F5D(&5R<F]R(&]N7
  825. XM('-A=F4@8V]M;6%N9`H`.B!#;W5L9"!N;W0@;W!E;B!I8V]N+FQI8G)A<GD*B
  826. XM`#H@0V]U;&0@;F]T(&-H96-K(&EC;VX@*&9O<B!T;V]L('1Y<&5S*0H`.B!%]
  827. XM<G)O<B!I;B!T;V]L='EP92!O<'1I;VYS"@`K,"XP,#`P,#`P,#``*S`N,#`PD
  828. XM,#`P,#`P`#`P+C`P,#`P`"LP+C`P,#`P`#`P,#`P`'@`>0!-`%H`:0!-86YD(
  829. XM96Q"<F]T`"LP+C`P,#`P,#`P,"`K,"XP,#`P,#`P,#``9W)A<&AI8W,N;&EBP
  830. XM<F%R>0!I;G1U:71I;VXN;&EB<F%R>0!D;W,N;&EB<F%R>0!I8V]N+FQI8G)A.
  831. XM<GD`:69F+FQI8G)A<GD`=&EM97(N9&5V:6-E``I4:&ES('!R;V=R86T@9')A3
  832. XM=W,@=&AE($UA;F1E;&)R;W0@86YD($IU;&EA('-E=',@*'H@+3X@>K(@*R!CA
  833. XM*0IU<VEN9R!A('-M87)T(&-O;G1O=7(M8W)A=VQI;F<@;65T:&]D(&%N9"!F)
  834. XM87-T(#,R+6)I="!F:7AE9"!P;VEN="!M871H+@I!=71H;W(Z($AA;FYU(")TR
  835. XM:&4@1$TB($AE;&UI;F5N"@I&<F5E;'D@9&ES=')I8G5T86)L92!V97)S:6]N?
  836. XM(#$N,#`*"B!Z(#T@('@@*R`@>2!I(&ES('1H92!C96YT97)P;VEN="!O9B!T@
  837. XM:&4@<V5T"B!C(#T@:G@@*R!J>2!I(&ES(&$@8V]N<W1A;G0@;VYL>2!F;W(@L
  838. XM2G5L:6$@<V5T<PH@;2!I<R!M86=N:69I8V%T:6]N+"`U("T@,CD@*&QO9R!S6
  839. XM8V%L92D*(&D@:7,@=&AE(&UA>&EM=6T@;G5M8F5R(&]F(&ET97)A=&EO;G,LX
  840. XM(&D@/#T@-C4U,S4*4V%V92!P:6-T=7)E<R!T;R!F:6QE;F%M92!B>2!#5%),F
  841. XM+5,*"D9L86=S.B`M;"!L;W<@("`@+6@@:&EG:"`@+6$@875T;R!P<F5C:7-IQ
  842. XM;VX*("`@("`@("UC(&-R87=L("`M=R!W86QK("`M<"!C<F%W;"!I9B!P;W-SM
  843. XM:6)L90H@("`@("`@+7@@97AI="`@("UG('5S92!'54D*("`@("`@("UJ(&IUK
  844. XM;&EA("`M;2!M86YD96QB<F]T"@I5<V%G93H@;6%N9&5L("!O<B`@;6%N9&5L^
  845. XM(#\*("`@;W(@(&UA;F1E;"![+7@;6S1M>!M;,&T@+7D;6S1M>1M;,&T@+6T;[
  846. XM6S1M;1M;,&T@+6D;6S1M:1M;,&T@+6PM:"UA("UC+7<M<"`M>"UG("UJ+6T*&
  847. XM("`@("`@("`@("`@("`@+6IX&ULT;6IX&ULP;2`M:GD;6S1M:GD;6S!M("USX
  848. XM&ULT;3QF:6QE;F%M93X;6S!M?0IC;VXZ,"\U,"\V-#`O,3`P+R!M86YD96P@3
  849. XM(&)Y($1-("`Q.3DP(`!M86YD96PN<&EC='5R90``````````````````````Z
  850. XM`````````````````````````````````````````````````````````````
  851. XM`````````````````````````````````````````````````````````````
  852. XM`````````````````````````````````````````````````````````````
  853. XM`````````````````````````````````````````````````````````````
  854. XM`````````````````````````````````````````````````````````````
  855. XM````````````````````````#W(```/L````%0````````F$```)B```"8P`X
  856. XM``F0```)E```"9@```F<```)H```":0```FH```)K```";````FT```)Q@``]
  857. XM"<H```G.```)T@``"=8```G:```)W@``">(```!I`````0```10```%>```!X
  858. XM?````8X```&6```!G@```:@```'8```!X````?(```'Z```"`@```@P```(\B
  859. XM```"3````F@```)Z```"E````J8```+````"T@```NP```+^```#&````RH`^
  860. XM``,R```#.@```T0```-T```#A````Z````.R```#S````]X```/X```$"@``(
  861. XM!!(```0:```$)```!%0```1D```$@```!)(```2L```$O@``!-@```3J```$V
  862. XM\@``!/H```4$```%-```!40```5@```%<@``!8P```6>```%N```!<H```7.J
  863. XM```%Y```!?8```7Z```&$```!B(```8F```&/```!DX```92```&:```!GH`I
  864. XM``9^```&I@``!JH```@(```(#```""````@X```(5```"'````B,```(J```$
  865. XM"*P```C$```(W```".````CX```)$```"10```DL```)1```"4@```E@```)'
  866. XM?```"@````H$```*"```"@P```H0```*%```"A@```H<```*(```"B0```HH&
  867. XM```0=````!`````"```&R@``!MX```;R```'!@``!QH```<N```'0@``!U8`+
  868. XM``=J```'?@``!Y(```>F```'N@``!\X```?B```']@````````/R0``#Z@``:
  869. XM`/($``H`$0`@@$!`_^````0`#@`?`#^```#_X$I`((`1``H`!````#^`'P`.4
  870. XM``0````$``P`%``D`$0`A`!$`"0`%``,``0```````@`&``X`'@`.``8``@`(
  871. XM`````(``P`"@`)``B`"$`(@`D`"@`,``@```````0`!@`'``>`!P`&``0```,
  872. XM``````````````````/\<B4"!!57`F0E50>4154'E'(E`F0```($```#_```Z
  873. XM````````______________P#C=K\`^JH_`/:JO@#NJKX`XW:_`/___P#___\G
  874. XM`___________````````!_P```0$9G5^A%551`16=42$55=$!&551(0``$?\A
  875. XM``!`@```?X``````________^`/___@#F8J``ZJJ@`.IBH`#JJB``YJJ@`/_[
  876. XM_X`#__^`?___@'______``````````````.<9S=S#%1$(I1F)B``5!0@`%=GT
  877. XM(I0```,,```#G```````````______________QCF,B,\ZN[W6N9V=__J^O?+
  878. XM_ZB8W6O___SS___\8___________```````````KLP``.JJ``"NJ@``JJH``T
  879. XM*JL`````````````````````````$````&P```""```&@@``"0(``#@$```)K
  880. XM`@``!H(```""````;````!```````````````````/__X`#__^``U$S@`,55>
  881. XM8`#456``U55@`-54X`#__^``___@`/__X`#__^``_^_@`/^3X`#_?>``^7W@F
  882. XM`/;]X`#'^^``]OW@`/E]X`#_?>``_Y/@`/_OX`#__^``___@`/__X```````4
  883. XM`````!5%P``514``%47``%5%0`!W=4````````````````````````>````(C
  884. XM0```&"````0@```$$````A````((```!!@```(0```!X````````````````/
  885. XM````````___@`/__X`#JNB``ZKJ@`.JZ(`"JNJ``B(J@`/__X`#__^``___@8
  886. XM`/__X`#X?^``][_@`.??X`#[W^``^^_@`/WOX`#]]^``_OG@`/][X`#_A^``L
  887. XM___@`/__X`#__^``___@``````````````````````_P`#JN``@0`"JD``I0?
  888. XM`"JD``F0`"JD``F0`#ND``I0``@```@0``````_P`````````````````/__D
  889. XM___^`/_____^`/____`.`,51__`.`-5;__`.`-5;__`.`-5;__`.`,1;__`.G
  890. XM`/?___`.`/____`.`/_____^`/_____^`````_(```/K````1P```_(```/IM
  891. XM````/$CGX.(D`"!Y````Z"`(9@IA*F<B(\@```#L#&@$```&90@D2&$69PXD\
  892. XMB#`H``8A@@``6&@`!DS?1P=.=2`\```$`'(`+'@`!$ZN_SI*@&<6($!"D#%\@
  893. XM``@`!#%\``@`!B/(````Z$YU2.=@XB1Y````['#_(@IG-EAJ``0P*@`$)#(`)
  894. XM_+!J``9F(")*)%$@/```!``L>``$3J[_+B/*````[&8&0KD```#H(`)R_TS?:
  895. XM1P9.=4CGP.(D>0```.PL>``$(DH@"F<.)%$@/```!`!.KO\N8.Q"N0```.A",
  896. XMN0```.Q,WT<#3G4``````````````^P````)````!`````@````6````8@``9
  897. XJ`&X```">````I@```+H```#8````W@````````/R```#Z@````````/RY
  898. X``
  899. Xend
  900. Xsize 15792
  901. END_OF_FILE
  902. if test 22144 -ne `wc -c <'mandel.uu'`; then
  903.     echo shar: \"'mandel.uu'\" unpacked with wrong size!
  904. fi
  905. # end of 'mandel.uu'
  906. fi
  907. if test ! -d 'source' ; then
  908.     echo shar: Creating directory \"'source'\"
  909.     mkdir 'source'
  910. fi
  911. if test -f 'source/gui.asm.ae' -a "${1}" != "-c" ; then 
  912.   echo shar: Will not clobber existing file \"'source/gui.asm.ae'\"
  913. else
  914. echo shar: Extracting \"'source/gui.asm.ae'\" \(546 characters\)
  915. sed "s/^X//" >'source/gui.asm.ae' <<'END_OF_FILE'
  916. X* This one for RightButton.
  917. Xtmpx        ds.w  1
  918. Xtmpy        ds.w  1
  919. X
  920. X* Huh! My very own structure.
  921. XMyMandelBrot:
  922. X            ds.b  mb_SIZEOF
  923. XMyTmpRas:   ds.b  tr_SIZEOF
  924. XMyAreaInfo: ds.b  ai_SIZEOF
  925. XIOreq:      ds.b  IOTV_SIZE
  926. XMsgPort:    ds.b  MP_SIZE
  927. X
  928. Xinter:      ds.b  1     ; Boolean: are we interactive
  929. Xerror:      ds.b  1     ; general error code
  930. Xmethod:     ds.b  1     ; method of zooming (ZOOM, REDRAW or RESET)
  931. Xisdrawn:    dc.b  1     ; Boolean: is grid drawn?
  932. Xsaveit:     dc.b  1     ; Boolean: do we have to save picture?
  933. X         end
  934. X
  935. END_OF_FILE
  936. if test 546 -ne `wc -c <'source/gui.asm.ae'`; then
  937.     echo shar: \"'source/gui.asm.ae'\" unpacked with wrong size!
  938. fi
  939. # end of 'source/gui.asm.ae'
  940. fi
  941. if test -f 'source/iff.i' -a "${1}" != "-c" ; then 
  942.   echo shar: Will not clobber existing file \"'source/iff.i'\"
  943. else
  944. echo shar: Extracting \"'source/iff.i'\" \(1448 characters\)
  945. sed "s/^X//" >'source/iff.i' <<'END_OF_FILE'
  946. X*  Assembler include file for the iff library 
  947. X*  by Christian A. Weber, Zurich/Switzerland            V16.1  01-Dec-88
  948. X
  949. X        XREF    _IFFBase
  950. X
  951. XIFFVERSION:    EQU    16
  952. X
  953. XIFF:          MACRO
  954. X        movea.l    _IFFBase,a6
  955. X        jsr    %1(a6)
  956. X          ENDM
  957. X
  958. X
  959. X*************** L I B R A R Y - O F F S E T S ****************************
  960. X
  961. XOpenIFF:    equ    -30    ; (filename)            (A0)
  962. XCloseIFF:    equ    -36    ; (ifffile)            (A1)
  963. XFindChunk:    equ    -42    ; (ifffile,chunkname)        (A1,D0)
  964. XGetBMHD:    equ    -48    ; (ifffile)            (A1)
  965. XGetColorTab:    equ    -54    ; (ifffile,colortable)        (A1/A0)
  966. XDecodePic:    equ    -60    ; (ifffile,bitmap)        (A1/A0)
  967. XSaveBitMap:    equ    -66    ; (name,bmap,ctab,crmd)        (A0-A2,D0)
  968. XSaveClip:    equ    -72    ; (name,bmap,ctab,crmd,x,y,w,h)    (A0-A2,D0-D4)
  969. XIffError:    equ    -78    ; ()                ()
  970. XGetViewModes:    equ    -84    ; (ifffile)            (A1)
  971. XNewOpenIFF:    equ    -90    ; (filename,memtype)        (A0,D0)
  972. X
  973. X
  974. X*************** F E H L E R - C O D E S **********************************
  975. X
  976. XIFF_BADTASK:        equ    -1    ; Fehler-Abfrage von falschem Task!
  977. X
  978. XIFF_CANTOPENFILE:    equ    16    ; Datei existiert nicht
  979. XIFF_READERROR:        equ    17    ; Fehler beim Einlesen der Datei
  980. XIFF_NOMEM:        equ    18    ; zuwenig Speicher um Datei zu laden
  981. XIFF_NOTIFF:        equ    19    ; Datei ist kein IFF-File
  982. XIFF_WRITEERROR:        equ    20    ; Fehler beim schreiben
  983. X
  984. XIFF_NOILBM:        equ    24    ; kein ILBM-File
  985. XIFF_NOBMHD:        equ    25    ; BMHD-Chunk nicht gefunden
  986. XIFF_NOBODY:        equ    26    ; BODY-Chunk nicht gefunden
  987. XIFF_TOOMANYPLANES:    equ    27    ; Bild hat mehr Planes als BitMap
  988. XIFF_UNKNOWNCOMPRESSION:    equ    28    ; Unbekannter Kompressions-Typ
  989. X
  990. END_OF_FILE
  991. if test 1448 -ne `wc -c <'source/iff.i'`; then
  992.     echo shar: \"'source/iff.i'\" unpacked with wrong size!
  993. fi
  994. # end of 'source/iff.i'
  995. fi
  996. if test -f 'source/macros.i' -a "${1}" != "-c" ; then 
  997.   echo shar: Will not clobber existing file \"'source/macros.i'\"
  998. else
  999. echo shar: Extracting \"'source/macros.i'\" \(349 characters\)
  1000. sed "s/^X//" >'source/macros.i' <<'END_OF_FILE'
  1001. X* \0 should be the suffix. Hope this works.
  1002. X
  1003. Xbhs   macro
  1004. X      bcc.\0   \1
  1005. X      endm
  1006. X
  1007. Xblo   macro
  1008. X      bcs.\0   \1
  1009. X      endm
  1010. X
  1011. Xpush  macro
  1012. X      movem.l   \1,-(sp)
  1013. X      endm
  1014. X
  1015. Xpull  macro
  1016. X      movem.l   (sp)+,\1
  1017. X      endm
  1018. X
  1019. XBase  macro
  1020. X      move.l   _\1Base,a6
  1021. X      endm
  1022. X
  1023. XCall  macro
  1024. X      xref     _LVO\1
  1025. X      jsr      _LVO\1(a6)
  1026. X      endm
  1027. X
  1028. END_OF_FILE
  1029. if test 349 -ne `wc -c <'source/macros.i'`; then
  1030.     echo shar: \"'source/macros.i'\" unpacked with wrong size!
  1031. fi
  1032. # end of 'source/macros.i'
  1033. fi
  1034. if test -f 'source/mbrot.i' -a "${1}" != "-c" ; then 
  1035.   echo shar: Will not clobber existing file \"'source/mbrot.i'\"
  1036. else
  1037. echo shar: Extracting \"'source/mbrot.i'\" \(1659 characters\)
  1038. sed "s/^X//" >'source/mbrot.i' <<'END_OF_FILE'
  1039. X
  1040. X     IFND EXEC_TYPES_I
  1041. X     INCLUDE "exec/types.i"
  1042. X     ENDC
  1043. X
  1044. X* signed 32-bit fixed point, scaled by 2^29 (range -4 .. 4)
  1045. XFIXED MACRO
  1046. X      LONG  \1
  1047. X      ENDM
  1048. X
  1049. X   STRUCTURE   mbrot,0
  1050. X
  1051. X* Rastport image will be drawn to
  1052. X      APTR  mb_RastPort
  1053. X
  1054. X* These define z = x0 + y0 i that will be mapped to upper lefthand
  1055. X* corner of Rastport (that is (0,0) NOT (x1,y1))
  1056. X      FIXED mb_x0
  1057. X      FIXED mb_y0
  1058. X
  1059. X* Deltas in both directions, i.e. how much to increment z for each pixel
  1060. X      FIXED mb_dx
  1061. X      FIXED mb_dy
  1062. X
  1063. X* If this is actually a Julia set, this is the c = jx + jy i
  1064. X      FIXED mb_jx
  1065. X      FIXED mb_jy
  1066. X
  1067. X* (x1,y1)-(x2,y2) rectangle within rastport to fill with mandelbrot
  1068. X      UWORD mb_x1
  1069. X      UWORD mb_y1
  1070. X      UWORD mb_x2
  1071. X      UWORD mb_y2
  1072. X
  1073. X* Pointer to a call-back procedure (or NULL) that should return
  1074. X* with Z clear (result nonzero) if some kind of break condition is met
  1075. X      APTR  mb_break
  1076. X
  1077. X      UWORD mb_i           ; max. number of iterations, 0<= i <=65533
  1078. X      UWORD mb_colors      ; number of colors used in colouring OUTSIDE
  1079. X      UBYTE mb_flags       ; see below
  1080. X      BYTE  mb_pad
  1081. X   LABEL mb_SIZEOF
  1082. X
  1083. X* Flags for mb_flags
  1084. X      BITDEF   MB,HIGH,0   ; 32 bit precision enabled
  1085. X      BITDEF   MB,CRAWL,1  ; crawling enabled
  1086. X      BITDEF   MB,JULIA,2  ; this is actually a Julia set
  1087. X      BITDEF   MB,AUTOPREC,3 ; automatic precision (16/32 bits, ignore HIGH)
  1088. X      BITDEF   MB,AUTOCRAWL,4 ; automatic crawling when adequate, ign. CRAWL
  1089. X
  1090. X* Limit for AUTOPREC
  1091. XDELTALIMIT  EQU   $40000
  1092. X
  1093. X* PIXEL color defines
  1094. XCLEAR    EQU   0  ; the color (x1,y1)-(x2,y2) is cleared to
  1095. XINTERIOR EQU   1  ; inside the set
  1096. XFIRST    EQU   2  ; outside the set
  1097. X
  1098. END_OF_FILE
  1099. if test 1659 -ne `wc -c <'source/mbrot.i'`; then
  1100.     echo shar: \"'source/mbrot.i'\" unpacked with wrong size!
  1101. fi
  1102. # end of 'source/mbrot.i'
  1103. fi
  1104. if test -f 'source/pipe.asm' -a "${1}" != "-c" ; then 
  1105.   echo shar: Will not clobber existing file \"'source/pipe.asm'\"
  1106. else
  1107. echo shar: Extracting \"'source/pipe.asm'\" \(4315 characters\)
  1108. sed "s/^X//" >'source/pipe.asm' <<'END_OF_FILE'
  1109. X
  1110. X* This file: pipe v0.01
  1111. X
  1112. X* (c) 1990 by The DM
  1113. X
  1114. X   XDEF     f_push
  1115. X   XDEF     f_pull
  1116. X   XDEF     f_clear
  1117. X
  1118. X   XREF     _LVOAllocMem
  1119. X   XREF     _LVOFreeMem
  1120. X
  1121. XMAXDEPTH    EQU   254
  1122. X
  1123. X   SECTION  pipe,CODE
  1124. X
  1125. X* error = f_push(value)
  1126. X*   Z            d0
  1127. X
  1128. X* Will push d0.l to dynamically allocated linked list of memory
  1129. X* that represents pipe (fifo). Pointers _Head and _Tail should be
  1130. X* initialized to 0 before first call. Define MAXDEPTH to # of
  1131. X* longwords to be stored in one chunk of memory.
  1132. X* If Z is set (result zero) no memory was left.
  1133. X
  1134. X* All registers are preserved.
  1135. X
  1136. X* Structure:
  1137. X*
  1138. X* LONG next       ; points to previous structure
  1139. X* WORD used       ; offset from beginning, points to 1st used long.
  1140. X* WORD free       ; offset from beginning, points to 1st free long.
  1141. X* LONG data [0]   ; 1st longword of data
  1142. X* ...
  1143. X* LONG data [MAXDEPTH-1]
  1144. X
  1145. X
  1146. Xf_push:
  1147. X         movem.l  a0-a2/a6/d0-d2,-(a7)
  1148. X         move.l   d0,d2
  1149. X         move.l   _Head,a0
  1150. X         move.l   a0,d0
  1151. X         bne.s    1$
  1152. X
  1153. X* This is first time we are called so
  1154. X         bsr.s    _push1
  1155. X         beq.s    3$          ; error, no memory
  1156. X         move.l   a0,_Tail    ; this pointer also needs to be initialized
  1157. X1$:
  1158. X         cmp.w    #(MAXDEPTH*4)+4+2+2,6(a0)
  1159. X         bcs.s    4$
  1160. X
  1161. X* This hunk is full, allocate next one
  1162. X         move.l   a0,a2
  1163. X         bsr.s    _push1
  1164. X         beq.s    3$          ; error, no memory!
  1165. X         move.l   a0,(a2)     ; link hunks
  1166. X4$:
  1167. X         move.w   6(a0),d0    ; free
  1168. X         move.l   d2,0(a0,d0.w)
  1169. X         addq.w   #4,6(a0)    ; result is nonzero
  1170. X3$:                           ; if brach here, result is zero
  1171. X         movem.l  (a7)+,a0-a2/a6/d0-d2
  1172. X         rts
  1173. X
  1174. X* Here we allocate one block.
  1175. X* nextblock/a0 , Z/error = _push1 ()
  1176. X_push1:
  1177. X         move.l   #(MAXDEPTH*4)+4+2+2,d0
  1178. X         moveq    #0,d1
  1179. X         move.l   $4,a6
  1180. X         jsr      _LVOAllocMem(a6)
  1181. X         tst.l    d0
  1182. X         beq.s    2$
  1183. X
  1184. X
  1185. X         move.l   d0,a0
  1186. X         clr.l    (a0)        ; next field set to zero
  1187. X         move.w   #8,4(a0)    ; used initialized to 4 (offset)
  1188. X         move.w   #8,6(a0)    ; free initialized to 8 (offset)
  1189. X         move.l   a0,_Head    ; result is nonzero
  1190. X2$:                           ; if branch here, result is zero
  1191. X         rts                  ; if error, Z will be set
  1192. X
  1193. X
  1194. X* value = f_pull ()
  1195. X*  d0
  1196. X
  1197. X* Will pull d0.l from dynamically allocated linked list of memory
  1198. X* that represents pipe. If client is trying to pull from empty
  1199. X* pipe, -1 will be returned and Z will be set.
  1200. X* Will automagically deallocate any memory.
  1201. X
  1202. X* NOTE: if you do not pull everything you have pushed, memory
  1203. X* will be lost!
  1204. X
  1205. Xf_pull:
  1206. X         movem.l  a0-a2/a6/d1-d2,-(a7)
  1207. X         move.l   _Tail,a2
  1208. X         moveq    #-1,d0
  1209. X         move.l   a2,d1
  1210. X         beq.s    1$          ; Pipe is empty
  1211. X
  1212. X         addq.w   #4,4(a2)
  1213. X         move.w   4(a2),d0
  1214. X         move.l   -4(a2,d0.w),d2  ; Pipe contains at least one value
  1215. X*                 ^^ This is because I just accidentally incremented d0
  1216. X
  1217. X         cmp.w    6(a2),d0       ; if used == free, time to free this block
  1218. X         bne.s    2$
  1219. X
  1220. X* Done with this block, deallocate it and move to next
  1221. X         move.l   a2,a1
  1222. X         move.l   (a1),a2
  1223. X         move.l   #(MAXDEPTH*4)+4+2+2,d0
  1224. X         move.l   $4,a6
  1225. X         jsr      _LVOFreeMem(a6)
  1226. X         move.l   a2,_Tail
  1227. X         bne.s    2$             ; if this was last block,
  1228. X         clr.l    _Head          ; clear _Head as well.
  1229. X2$:
  1230. X         move.l   d2,d0
  1231. X         moveq    #-1,d1         ; this is surely nonzero
  1232. X1$:
  1233. X         movem.l  (a7)+,a0-a2/a6/d1-d2
  1234. X         rts
  1235. X
  1236. X
  1237. X* f_clear ()
  1238. X
  1239. X* Will deallocate our pipe quickly, cleanly and completely in case there
  1240. X* is no need to process the remaining stuff in the pipe.
  1241. X
  1242. Xf_clear:
  1243. X         movem.l  a0-a2/a6/d0-d1,-(a7)
  1244. X         move.l   _Tail,a2
  1245. X         move.l   $4,a6
  1246. X1$:
  1247. X         move.l   a2,a1
  1248. X         move.l   a2,d0
  1249. X         beq.s    2$
  1250. X
  1251. X* This block is valid, deallocate it & back up
  1252. X         move.l   (a1),a2
  1253. X         move.l   #(MAXDEPTH*4)+4+2+2,d0
  1254. X         jsr      _LVOFreeMem(a6)
  1255. X         bra.s    1$
  1256. X2$:
  1257. X* Ups! Almost forget:
  1258. X         clr.l    _Head
  1259. X         clr.l    _Tail
  1260. X         movem.l  (a7)+,a0-a2/a6/d0-d1
  1261. X         rts
  1262. X
  1263. X* In order to save space, these are right here in program segment...
  1264. X
  1265. X_Head:   dc.l  0     ; initialized to zero!
  1266. X_Tail:   dc.l  0
  1267. X   END
  1268. END_OF_FILE
  1269. if test 4315 -ne `wc -c <'source/pipe.asm'`; then
  1270.     echo shar: \"'source/pipe.asm'\" unpacked with wrong size!
  1271. fi
  1272. # end of 'source/pipe.asm'
  1273. fi
  1274. echo shar: End of archive 1 \(of 4\).
  1275. cp /dev/null ark1isdone
  1276. MISSING=""
  1277. for I in 1 2 3 4 ; do
  1278.     if test ! -f ark${I}isdone ; then
  1279.     MISSING="${MISSING} ${I}"
  1280.     fi
  1281. done
  1282. if test "${MISSING}" = "" ; then
  1283.     echo You have unpacked all 4 archives.
  1284.     rm -f ark[1-9]isdone
  1285. else
  1286.     echo You still need to unpack the following archives:
  1287.     echo "        " ${MISSING}
  1288. fi
  1289. ##  End of shell archive.
  1290. exit 0
  1291. -- 
  1292. Mail submissions (sources or binaries) to <amiga@uunet.uu.net>.
  1293. Mail comments to the moderator at <amiga-request@uunet.uu.net>.
  1294. Post requests for sources, and general discussion to comp.sys.amiga.misc.
  1295.